import Mock from "mockjs";


import getDb from "./db.js";
const db = getDb("TestDBName");


/*
// 在表中插入数据-增
db.insertData("users", 'uuid', { name: "Tom Yun" }, (res) => {
  console.log('insertData', res);
});

// 获取数据-查
db.selectData("users", 'uuid', (res) => {
  console.log('selectData', res);
});

// 删除数据-删
db.deleteData("users", 'uuid', (res) => {
  console.log("deleteData", res);
});

//修改数据-改
db.updateData("users", 'uuid', { name: "timly" }, (res) => {
  console.log('updateData', res);
});
*/


/**
 * 根据传入的 num ,生成 num 条数据
 * @param {Number} num 
 */
function generatorList(num) {
  return Mock.mock({
    [`data|${num}`]: [
      {
        'id|+1': 1, // 模拟 ID,自增长
        'age|20-100': 0,
        'sex|1': ['男', '女'],
        name: "@first@last", // name
        title: '@ctitle(15, 25)', // 中文标题,长度 15 ~ 25 位
        image: '@natural(0, 15)', // 图片索引 0 ~ 15
        reads: '@natural(0, 99999)', // 阅读人数 0 ~ 99999
        from: '@ctitle(3, 10)', // 新闻来源,长度 3 ~ 10 位
        date: '@date("yyyy-MM-dd")', // 发布时间,
        email: "@email",// 邮箱
        cregion: "@region", // 中国大区
        cprovince: "@province", // 省
        ccity: "@city", // 市
        ss: "@city(true)", // 省 + 市
        country: "@county", // 县
        countrysx: "@county(true)", // 省市县
        code: "@zip", // 邮政编码
        color: "@color", // 颜色
        img: "@image('100*100','@color')", // img,参数1：背景色，参2：前景色，参3：图片的格式，默认png，参4：图片上的文字
        Etext: "@paragraph(1,1,3)", // 英文文本(句子)参1：句子的个数，参2：句子的最小个数  参3：句子的最大个数，没有参1时，参2参3才会生效
        Ctext: "@cparagraph(1,1,3)", // 中文文本(句子)参1：句子的个数，参2：句子的最小个数  参3：句子的最大个数，没有参1时，参2参3才会生效

        // uuid: Mock.Random.guid(),
        // name: Mock.Random.cname(),
        // addr: Mock.mock("@county(true)"),
        // "age|18-60": 1,
        // birth: Mock.Random.date(),
        // sex: Mock.Random.integer(0, 1),
      }
    ]
  })
}


// 模拟请求路由
function param2Obj(config) {
  if (config.type === "POST") {
    const body = config.body;
    return JSON.parse(body);
  } else {
    // get 请求
    const url = config.url;
    const search = url.split("?")[1];
    if (!search) {
      return {};
    }
    return JSON.parse(
      '{"' +
      decodeURIComponent(search)
        .replace(/"/g, '\\"')
        .replace(/&/g, '","')
        .replace(/=/g, '":"') +
      '"}'
    );
  }
}

let List = [
  Mock.mock({
    id: '001',
    'userId': '001', // 模拟 ID,自增长
    'age|20-100': 0,
    'sex|1': ['男', '女'],
    "state|1": ["离职", '在职', '试用期'],
    "role|1": ["员工", "组长", '老板'],
    userName: 'admin',
    userEamil: "@email",
    createTime: '@date("yyyy-MM-dd")',
    lastLoginTime: '@date("yyyy-MM-dd")',
  })
];
// 模拟生成一组数据
function generatorDefaultData() {
  const count = 3;

  for (let i = 0; i < count; i++) {
    const mockData = Mock.mock({
      'age|20-100': 0,
      'sex|1': ['男', '女'],
      "state|1": ["离职", '在职', '试用期'],
      "role|1": ["员工", "组长", '老板'],
      userName: Mock.Random.cname(),
      userEamil: "@email",
      createTime: '@date("yyyy-MM-dd")',
      lastLoginTime: '@date("yyyy-MM-dd")',
    });

    db.insertData("users", Mock.Random.guid(), mockData, (res) => {
      console.log('insertData', res);
    });
  }
}

// generatorDefaultData();

const mockAPI = {

  /**
   * 获取一条数据
   */
  selectOneUser: async (config) => {
    // const { id } = param2Obj(config);

    const data = await db.selectOneData("users", "a79ceF56-Fd3B-B6Dc-FebB-ece41a8f2d4E");

    return {
      code: 200,
      msg: '查询成功',
      data
    }
  },
  /**
  * 获取所有数据
   */
  selectAllUser: async (config) => {
    console.log('获取所有数据');
    // const { id, userName } = param2Obj(config);
    const data = await db.selectAllData('users');
    return {
      code: 200,
      msg: '获取成功',
      data
    }
  },
  /**
   * 增加用户
   */
  createUser: async (config) => {
    const { userName, userEmail } = param2Obj(config)
    const createTime = Mock.mock('@date("yyyy-MM-dd")');
    const id = Mock.Random.guid();

    const userInfo = {
      id,
      userName,
      userEmail,
      createTime
    };
    const data = await db.insertData("users", id, userInfo);
    return {
      code: 200,
      msg: '添加成功',
      data
    }
  },
  /**
   * 删除用户
   */
  deleteUser: async (config) => {
    console.log("删除用户");
    // const { userIds } = param2Obj(config);

    const data = await db.deleteData("users", "7aDd0bb8-A8E2-caF3-f0AD-325AB351bCcC");
    return {
      code: 200,
      msg: '删除成功',
      data
    }
  },
  /**
   * 批量删除
   */
  batchremove: (config) => {
    console.log("批量删除成功");

    const { userIds } = param2Obj(config);

    //  删除的数据
    List = List.filter(u => !userIds.includes(u.userId));

    return {
      code: 200,
      msg: '删除成功',
      data: userIds.length
    }
  },
  /**
   * 修改用户
   */
  updateUser: async (config) => {
    console.log('修改用户');

    // const { id, userName } = param2Obj(config);

    const lastLoginTime = Mock.mock('@date("yyyy-MM-dd")');
    const data = await db.updateData("users", "eaBBd8B7-756F-b775-EF22-5BCeA3e1A43D", { name: "timly3333", lastLoginTime },);

    return {
      code: 200,
      msg: '更新成功',
      data
    }
  },
};

export default mockAPI;
